package JZOffer;

import java.util.Stack;

/**
 * @author Lw中
 * @date 2021/8/5 22:38
 */
public class Jz27 {

    public class TreeNode {
       int val;
       TreeNode left;
       TreeNode right;
       TreeNode(int x) { val = x; }
    }

    // Jz27. 二叉树的镜像
    public TreeNode mirrorTree(TreeNode root) {
//        // 方法1：递归实现
//        if (root == null) return null;
//        TreeNode leftNode = mirrorTree(root.right); // 获取当前节点的右节点
//        TreeNode rightNode = mirrorTree(root.left); // 获取当前节点的左节点
//        // 置换当前节点的左右节点
//        root.left = leftNode;
//        root.right = rightNode;
//        // 将当前节点返回
//        return root;

        // 方法2：使用栈进行辅助实现
        if (root == null) return null;
        TreeNode temp;
        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);
        while (!stack.isEmpty()) {
            TreeNode node = stack.pop();
            if (node.left != null) stack.push(node.left);
            if (node.right != null) stack.push(node.right);
            temp = node.left;
            node.left = node.right;
            node.right = temp;
        }
        return root;
    }

}
